﻿Imports System.Collections.Generic
Imports System.Data
Imports CondorTravel.BC
Imports CondorTravel.BE
Imports CondorTravelUTIL.DL

Public Class AdministrarPaquetes
    Inherits PaginaBase

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not Page.IsPostBack Then
            CargarEstados()
            CargarPais()

            txtFechaIni.Attributes.Add("readonly", "readonly")
            txtFechaFin.Attributes.Add("readonly", "readonly")

            cl1.StartDate = "01/01/2000"

            cl2.StartDate = "01/01/2000"

            txtFechaIni.Text = Convert.ToDateTime(Date.Now).ToString("dd/MM/yyyy")
            txtFechaFin.Text = Convert.ToDateTime(Date.Now).ToString("dd/MM/yyyy")

            If Session("TipoEvento") = 0 Then  ' Agregar 
                'Crear Tabla temporal para detalle de paquete
                CrearTablaTemporal()
                lblTitulo.Text = "Nuevo Paquete"

            ElseIf Session("TipoEvento") = 1 Then  ' Modifica 
                lblTitulo.Text = "Edicion de Paquete"
                CrearTablaTemporal()
                CargarDatosPaqueteEditar()

            End If
        End If

        If My.Request.Params("__EVENTTARGET") = "MiFuncionPaquetes" Then
            CargarDatosPaquetePopUp()
        End If
    End Sub

    Public Sub CargarDatosPaquetePopUp()

        If Session("BSSCodigoSolicitudPaq") = Nothing Then
            txtCodSolicitud.Text = String.Empty
        Else
            txtCodSolicitud.Text = Session("BSSCodigoSolicitudPaq")
            txtNomPaquete.Text = Session("BSSNombreSolicitudPaq")
            txtFechaIni.Text = Convert.ToDateTime(Session("BSSFIniSolicitudPaq")).ToString("dd/MM/yyyy")
            txtFechaFin.Text = Convert.ToDateTime(Session("BSSFFinSolicitudPaq")).ToString("dd/MM/yyyy")
        End If
    End Sub

    Public Sub CrearTablaTemporal()
        Dim dt As New DataTable
        dt.Columns.Add("C_COD_PAIS")
        dt.Columns.Add("T_DES_PAIS")
        dt.Columns.Add("C_COD_CIUDAD")
        dt.Columns.Add("T_DES_CIUDAD")
        dt.Columns.Add("C_COD_SERVICIO")
        dt.Columns.Add("T_DES_SERVICIO")
        Session("tabSes") = dt
        Me.dgDetalle.DataSource = dt
        Me.dgDetalle.DataBind()
    End Sub

    Private Sub CargarEstados()
        Dim objEstadosBC As New EstadoDocBC
        Dim listEstadoBE As List(Of EstadoDocBE) = New List(Of EstadoDocBE)

        Dim objEstadoSeleccione As EstadoDocBE = New EstadoDocBE
        objEstadoSeleccione.Codigo = 0
        objEstadoSeleccione.Descripcion = "[Seleccione]"
        listEstadoBE.Add(objEstadoSeleccione)

        Dim objEstadoBE As New EstadoDocBE
        objEstadoBE.Tipo = "P"

        listEstadoBE.AddRange(objEstadosBC.EstadoListar(objEstadoBE))

        cboEstado.DataSource = listEstadoBE
        cboEstado.DataValueField = "Codigo"
        cboEstado.DataTextField = "Descripcion"
        cboEstado.DataBind()
    End Sub

    Private Sub CargarPais()
        Dim objPaisBC As New PaisBC
        Dim listPaisBE As List(Of PaisBE) = New List(Of PaisBE)
        Dim objPaisSeleccione As PaisBE = New PaisBE
        objPaisSeleccione.Codigo = 0
        objPaisSeleccione.Descripcion = "[Seleccione]"
        listPaisBE.Add(objPaisSeleccione)

        listPaisBE.AddRange(objPaisBC.ListarPais)

        cboPais.DataSource = listPaisBE
        cboPais.DataValueField = "Codigo"
        cboPais.DataTextField = "Descripcion"
        cboPais.DataBind()
    End Sub

    Private Sub CargarCiudad(ByVal strPais As String)
        Dim objCiudadBC As New CiudadBC
        Dim listCiudadBE As List(Of CiudadBE) = New List(Of CiudadBE)
        Dim objCiudadSeleccione As CiudadBE = New CiudadBE
        objCiudadSeleccione.Codigo = 0
        objCiudadSeleccione.Descripcion = "[Seleccione]"
        listCiudadBE.Add(objCiudadSeleccione)

        Dim objPais As New PaisBE
        objPais.Codigo = strPais.Trim
        listCiudadBE.AddRange(objCiudadBC.ListarCiudad(objPais))

        cboCiudad.DataSource = listCiudadBE
        cboCiudad.DataValueField = "Codigo"
        cboCiudad.DataTextField = "Descripcion"
        cboCiudad.DataBind()
    End Sub

    Private Sub CargarServicioCiudad()
        Dim objServiciosBC As New ServicioBC
        Dim listServicioBE As List(Of ServicioBE) = New List(Of ServicioBE)

        Dim objServicioSeleccione As ServicioBE = New ServicioBE
        objServicioSeleccione.CodServicio = 0
        objServicioSeleccione.NombreServicio = "[Seleccione]"
        listServicioBE.Add(objServicioSeleccione)

        Dim objServCiudad As ServicioBE = New ServicioBE
        objServCiudad.codCiudad = cboCiudad.SelectedValue

        listServicioBE.AddRange(objServiciosBC.ListaServicioCiudad(objServCiudad))

        cboServicio.DataSource = listServicioBE
        cboServicio.DataValueField = "CodServicio"
        cboServicio.DataTextField = "NombreServicio"
        cboServicio.DataBind()
    End Sub

    Protected Sub cboPais_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles cboPais.SelectedIndexChanged
        If cboPais.SelectedIndex >= 0 Then
            CargarCiudad(cboPais.SelectedValue)
        End If
    End Sub

    Protected Sub btnGrabar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnGrabar.Click
        Try
            Dim objPaqueteBE As PaquetesBE
            Dim objPaqueteBC As PaquetesBC
            Dim bExito As Boolean = False
            Dim sMensaje As String = String.Empty
            Dim sCodigo As String = String.Empty

            Dim strPaquete As String
            Dim iCiudad As Integer
            Dim strFechaInicio As Date
            Dim strFechaFin As Date
            Dim strUsuario As String


            If validaCampos() Then
                strPaquete = txtNomPaquete.Text
                strFechaInicio = Convert.ToDateTime(txtFechaIni.Text.Trim).ToString("dd\-MM\-yyyy")
                strFechaFin = Convert.ToDateTime(txtFechaFin.Text.Trim).ToString("dd\-MM\-yyyy")
                strUsuario = CType(Session("usuario"), UsuariosBE).CodUsuario

                objPaqueteBE = New PaquetesBE

                If txtCodSolicitud.Text <> "" Then
                    objPaqueteBE.codSolicitud = Convert.ToInt16(txtCodSolicitud.Text)
                End If

                objPaqueteBE.NombrePaquete = Replace(Replace(strPaquete, "'", ""), ",", "/")
                objPaqueteBE.Estado = "C"
                objPaqueteBE.Ciudad = iCiudad
                objPaqueteBE.InicioVigencia = Replace(strFechaInicio, ",", "")
                objPaqueteBE.FinVigencia = Replace(strFechaFin, ",", "")

                objPaqueteBC = New PaquetesBC
                Dim strMensaje As String = ""

                If Session("TipoEvento") = 0 Then  ' Agregar 
                    objPaqueteBE.UsuarioCreacion = strUsuario
                    objPaqueteBC.InsertarPaquete(objPaqueteBE, bExito, sMensaje, sCodigo)
                    strMensaje = "El registro fue ingresado con éxito."

                ElseIf Session("TipoEvento") = 1 Then  ' Modifica 
                    sCodigo = Session("CodigoPaquete")
                    objPaqueteBE.codPaquete = Session("CodigoPaquete")
                    objPaqueteBE.UsuarioActualiza = strUsuario
                    objPaqueteBC.ModificaPaquete(objPaqueteBE, bExito, sMensaje)
                    strMensaje = "El registro fue actualizado con éxito."

                    If bExito Then
                        objPaqueteBC.EliminarDetallePaquete(objPaqueteBE, bExito, sMensaje)
                    End If

                End If

                If bExito Then

                    GrabarDetalle(sCodigo)

                    Alerta(strMensaje, True, "ConsultarPaquetes.aspx")
                    limpiaCampos()

                Else
                    Alerta("Error: Hubieron problemas al registrar el paquete.", False, String.Empty)
                    Exit Sub
                    'lblMensaje.Text = sMensaje
                End If

            End If

        Catch ex As Exception

        End Try
    End Sub

    Sub GrabarDetalle(ByVal sCodigo As String)
        Dim drItem As DataRow
        Dim i As Integer = 0
        Dim dt As New DataTable
        Dim listDetalle As List(Of DetallePaqueteBE) = New List(Of DetallePaqueteBE)
        Dim objDetallePaquete As DetallePaqueteBE
        Dim bExito As Boolean = False
        Dim sMensaje As String = String.Empty

        Dim objPaqueteBC As New PaquetesBC

        dt = Session("tabSes")

        If dt.Rows.Count > 0 Then

            Do While i < dt.Rows.Count
                drItem = dt.Rows(i)
                objDetallePaquete = New DetallePaqueteBE

                objDetallePaquete.C_COD_PAQUETE = sCodigo
                objDetallePaquete.C_COD_SERVICIO = drItem.Item(4).ToString
                objDetallePaquete.C_COD_CIUDAD = drItem.Item(2).ToString

                listDetalle.Add(objDetallePaquete)
                i = i + 1

                objPaqueteBC.InsertarPaqueteDet(objDetallePaquete, bExito, sMensaje, sCodigo)

                If bExito = False Then
                    Alerta("Error: Hubieron problemas al ingresar el detalle del paquete.", False, String.Empty)
                    Exit Sub
                End If

            Loop
        End If

    End Sub

    Sub limpiaCampos()

        txtCodSolicitud.Text = String.Empty
        txtNomPaquete.Text = String.Empty
        txtFechaIni.Text = String.Empty
        txtFechaFin.Text = String.Empty
        cboPais.SelectedIndex = 0
        cboCiudad.SelectedIndex = 0
        cboServicio.SelectedIndex = 0
        cboEstado.SelectedIndex = 0
        CrearTablaTemporal()

    End Sub

    Function validaCampos() As Boolean

        If txtCodSolicitud.Text.Trim = String.Empty Then
            Alerta("Ingrese el código de solicitud de paquete.", False, String.Empty)
            Return False
        End If
        If txtNomPaquete.Text.Trim = String.Empty Then
            Alerta("Ingrese el nombre del paquete.", False, String.Empty)
            Return False
        End If
       
        If cboPais.SelectedValue = String.Empty Then
            Alerta("Seleccione un país.", False, String.Empty)
            Return False
        End If
        If cboCiudad.SelectedIndex = 0 Then
            Alerta("Seleccione una ciudad.", False, String.Empty)
            Return False
        End If

        'If cboEstado.SelectedIndex = 0 Then
        '    Alerta("Seleccione un estado.", False, String.Empty)
        '    Return False
        'End If

        Dim fechasIni As String = txtFechaIni.Text.Trim
        Dim fechasFin As String = txtFechaFin.Text.Trim

        If DateDiff(DateInterval.Day, CDate(txtFechaFin.Text), CDate(txtFechaIni.Text)) > 0 Then
            Alerta("La fecha inicial no debe exceder al final.", False, String.Empty)
            Return False
        End If


        If (Convert.ToDateTime(txtFechaIni.Text).ToString("dd/MM/yyyy") < Date.Now Or Convert.ToDateTime(txtFechaFin.Text).ToString("dd/MM/yyyy") < Date.Now) And Session("TipoEvento") = 0 Then
            Alerta("La fecha debe ser mayor a la actual.", False, String.Empty)
            Return False
        End If

        If Not IsDate(fechasIni) Then
            Alerta("La fecha de inicio de vigencia no tiene formato DD/MM/YYYY.", False, String.Empty)
            Return False
        End If

        If Not IsDate(fechasFin) Then
            Alerta("La fecha de fin de vigencia no tiene formato DD/MM/YYYY.", False, String.Empty)
            Return False
        End If

        Return True

    End Function

    Protected Sub cboCiudad_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles cboCiudad.SelectedIndexChanged
        If cboCiudad.SelectedIndex >= 0 Then
            CargarServicioCiudad()
        End If
    End Sub


    Protected Sub btnAgregarDetalle_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnAgregarDetalle.Click

        If cboPais.SelectedValue = "[Seleccione]" Then
            Alerta("Seleccione el País.", False, String.Empty)
            Exit Sub
        End If
        If cboCiudad.SelectedValue = "[Seleccione]" Then
            Alerta("Seleccione la Ciudad.", False, String.Empty)
            Exit Sub
        End If
        If cboServicio.SelectedValue = "[Seleccione]" Then
            Alerta("Seleccione el Servicio.", False, String.Empty)
            Exit Sub
        End If

        AgregarDetallePaquete(cboPais.SelectedValue, cboPais.SelectedItem.Text, _
                              cboCiudad.SelectedValue, cboCiudad.SelectedItem.Text, _
                              cboServicio.SelectedValue, cboServicio.SelectedItem.Text)
        
    End Sub

    Private Sub AgregarDetallePaquete(ByVal codPais As String, ByVal desPais As String, ByVal codCiudad As String, ByVal desCiudad As String, ByVal codServicio As String, ByVal desServicio As String)
        Dim dt As New DataTable
        Dim drItem As DataRow
        Dim i As Integer = 0
        Dim cDetalle As Integer
        dt = Session("tabSes")

        If dt.Rows.Count > 0 Then

            Do While i < dt.Rows.Count
                drItem = dt.Rows(i)

                If (codPais = drItem.Item(0).ToString And codCiudad = drItem.Item(2).ToString And codServicio = drItem.Item(4).ToString) Then
                    cDetalle = cDetalle + 1
                End If

                i = i + 1
            Loop

            If cDetalle = 0 Then
                Dim dRow As DataRow = dt.NewRow
                dRow("C_COD_PAIS") = codPais
                dRow("T_DES_PAIS") = desPais
                dRow("C_COD_CIUDAD") = codCiudad
                dRow("T_DES_CIUDAD") = desCiudad
                dRow("C_COD_SERVICIO") = codServicio
                dRow("T_DES_SERVICIO") = desServicio
                dt.Rows.Add(dRow)

                Session("tabSes") = dt
                Me.dgDetalle.DataSource = dt
                Me.dgDetalle.DataBind()
                lblMensaje.Text = ""
                Exit Sub
            Else
                Alerta("ERROR: Ya se ingresó el mismo detalle.", False, String.Empty)
                Exit Sub
            End If

        Else
            Dim dRow As DataRow = dt.NewRow
            dRow("C_COD_PAIS") = codPais
            dRow("T_DES_PAIS") = desPais
            dRow("C_COD_CIUDAD") = codCiudad
            dRow("T_DES_CIUDAD") = desCiudad
            dRow("C_COD_SERVICIO") = codServicio
            dRow("T_DES_SERVICIO") = desServicio
            dt.Rows.Add(dRow)

            Session("tabSes") = dt
            Me.dgDetalle.DataSource = dt
            Me.dgDetalle.DataBind()
            lblMensaje.Text = ""

        End If

    End Sub

    Private Sub dgDetalle_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles dgDetalle.RowCommand

        Dim intCodigo As Integer = Convert.ToInt32(e.CommandArgument)
        Dim sMensaje As String = String.Empty
        Dim i As Integer = 0

        Select Case e.CommandName

            Case "Eliminar"

                Dim dt As New DataTable
                dt = Session("tabSes")

                If dt.Rows.Count > 0 Then

                    Do While i < dt.Rows.Count

                        If dt.Rows(i).Item("C_COD_SERVICIO").ToString = CType(intCodigo, String) Then
                            dt.Rows.Remove(dt.Rows(i))
                        End If

                        i = i + 1
                    Loop

                End If

                dgDetalle.DataSource = dt
                dgDetalle.DataBind()

        End Select

    End Sub

    Public Sub CargarDatosPaqueteEditar()

        Dim objPaqueteBC As PaquetesBC
        objPaqueteBC = New PaquetesBC

        Dim objPaqueteBE As PaquetesBE
        objPaqueteBE = New PaquetesBE

        Dim objPaqueteListBE As New List(Of PaquetesBE)
        Dim bExito As Boolean = False
        Dim sMensaje As String = String.Empty

        objPaqueteBE.codSolicitud = Session("CodigoPaquete")
        objPaqueteListBE = objPaqueteBC.ListarPaquete_Update(objPaqueteBE, bExito, sMensaje)

        If bExito Then
            ' Mostrar el registro
            txtCodSolicitud.Text = objPaqueteListBE.Item(0).codSolicitud
            txtNomPaquete.Text = objPaqueteListBE.Item(0).NombrePaquete
            txtFechaIni.Text = Convert.ToDateTime(objPaqueteListBE.Item(0).InicioVigencia).ToString("dd/MM/yyyy")
            txtFechaFin.Text = Convert.ToDateTime(objPaqueteListBE.Item(0).FinVigencia).ToString("dd/MM/yyyy")
            cboEstado.SelectedValue = objPaqueteListBE.Item(0).Estado

            CargarDatosDetPaqueteEditar()
        Else
            Alerta("ERROR: Ocurrió un problema al cargar los datos del paquete.", False, String.Empty)
            Exit Sub
        End If

    End Sub

    Public Sub CargarDatosDetPaqueteEditar()
        Dim objPaqueteBC As PaquetesBC
        objPaqueteBC = New PaquetesBC
        Dim objPaqueteBE As PaquetesBE
        objPaqueteBE = New PaquetesBE

        Dim objPaqueteDetListBE As New List(Of DetallePaqueteBE)
        Dim bExito As Boolean = False
        Dim sMensaje As String = String.Empty

        objPaqueteBE.codSolicitud = Session("CodigoPaquete")
        objPaqueteDetListBE = objPaqueteBC.ListaDetallePaquete_Update(objPaqueteBE, bExito, sMensaje)

        If bExito Then
            ' Mostrar el registro

            If objPaqueteDetListBE.Count > 0 Then
                Dim i As Integer = 0

                Do While i < objPaqueteDetListBE.Count

                    AgregarDetallePaquete(objPaqueteDetListBE.Item(i).C_COD_PAIS, objPaqueteDetListBE.Item(i).T_DES_PAIS, _
                                          objPaqueteDetListBE.Item(i).C_COD_CIUDAD, objPaqueteDetListBE.Item(i).T_DES_CIUDAD, _
                                          objPaqueteDetListBE.Item(i).C_COD_SERVICIO, objPaqueteDetListBE.Item(i).T_DES_SERVICIO)

                    i = i + 1
                Loop

            End If

        Else
            Alerta("ERROR: Ocurrió un problema al cargar los datos del detalle del paquete.", False, String.Empty)
            Exit Sub
        End If


    End Sub
End Class